// 使用“面向对象”的思维方式编写一个学生信息管理系统。这个案例不是面向对象
// 学生有id、姓名、年龄、分数等信息
// 程序提供展示学生列表、添加学生、编辑学生信息、删除学生等功能
package main

import (
	"fmt"
)

var (
	stuMap = make(map[int]*Student)
)

func main() {
	for {
		menu()
	}
}
func menu() {
	var op int
	fmt.Printf("请选择操作：1、学生列表\t 2、添加学生\t 3、删除学生\t 0、退出")

	_, err := fmt.Scan(&op)

	if err != nil {
		fmt.Println("输入有误")
		return
	}

	switch op {
	case 1:
		list()
	case 2:
		addStu()
	case 3:
		deleteStu()
	}
}

func addStu() {
	var id int
	var name string
	var age int
	var score float32

	fmt.Println("请输入id:")
	fmt.Scan(&id)

	fmt.Println("请输入名字:")
	fmt.Scan(&name)
	fmt.Println("请输入年龄:")
	fmt.Scan(&age)
	fmt.Println("请输入分数:")
	fmt.Scan(&score)

	add(id, name, age, score)
	list()
}

func deleteStu() {
	var id int

	fmt.Println("请输入id:")
	fmt.Scan(&id)

	deleteOption(id)
	list()
}

type Student struct {
	id    int
	Name  string
	Age   int
	Score float32
}

// 添加学生
func add(id int, name string, age int, score float32) {
	stu := &Student{id, name, age, score}
	_, ok := stuMap[id]
	if ok {
		fmt.Println("id为：", id, "的学生已经存在！")
		return
	}
	stuMap[id] = stu
}

// 删除学生
func deleteOption(id int) {
	_, ok := stuMap[id]
	if !ok {
		fmt.Println("id为：", id, "的学生不存在！")
		return
	}

	delete(stuMap, id)

}

// 遍历学生打印
func list() {
	if len(stuMap) == 0 {
		fmt.Println("暂无学生")
		return
	}

	fmt.Printf("当前学生列表：\n")
	fmt.Printf("id\t\t 姓名\t\t 年龄\t\t 分数\n")
	for _, v := range stuMap {
		fmt.Printf("%d\t\t %v\t\t %v\t\t %v\n", v.id, v.Name, v.Age, v.Score)

	}
}
